package com.mcg.ash;


import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.concurrent.TimeUnit;

/**
 * 文件变化监听器
 * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下：
 * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver，
 * 如果有文件的变化，则根据相关的文件比较器，判断文件时新增，还是删除，还是更改。（默认为1000毫秒执行一次扫描）
 */
public class Wechat_new extends FileAlterationListenerAdaptor {
    /**
     * 文件创建执行
     */

    public static String txt2String(File file) {
        String result = "";
        try {
            InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
            BufferedReader br = new BufferedReader(isr);
//            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
            String s = null;
            while ((s = br.readLine()) != null) {//使用readLine方法，一次读一行
                result = result + "\n" + s;
            }
            br.close();
            isr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }


    public void onFileCreate(File file) {

        String filepath = file.getAbsolutePath();
        System.out.println("[文件]:" + filepath);
        String[] aa = filepath.split("\\\\");
        String name = aa[aa.length - 2];
        System.out.println("[姓名]:" + name);
        if (file.getName().startsWith("qazwsxedc")){
            String pp = txt2String(file);
            WechatUtils.sendMess(name,pp);
        }else{
            WechatUtils.senda(name,filepath);
        }
        getTimeByCalendar();
        boolean zbc = file.delete();

    }

    /**
     * 文件创建修改
     */
    public void onFileChange(File file) {
    }

    /**
     * 文件删除
     */
    public void onFileDelete(File file) {
    }

    /**
     * 目录创建
     */
    public void onDirectoryCreate(File directory) {
    }

    /**
     * 目录修改
     */
    public void onDirectoryChange(File directory) {
    }

    /**
     * 目录删除
     */
    public void onDirectoryDelete(File directory) {
    }

    public void onStart(FileAlterationObserver observer) {
        // TODO Auto-generated method stub
        super.onStart(observer);
    }

    public void onStop(FileAlterationObserver observer) {
        // TODO Auto-generated method stub
        super.onStop(observer);
    }


    public static void main(String[] args) throws Exception {
        // 监控目录
        String rootDir = "C:\\work\\test";
        // 轮询间隔 5 秒
        long interval = TimeUnit.SECONDS.toMillis(1);
        // 创建过滤器
        IOFileFilter directories = FileFilterUtils.and(
                FileFilterUtils.directoryFileFilter(),
                HiddenFileFilter.VISIBLE);
        IOFileFilter files = FileFilterUtils.and(
                FileFilterUtils.fileFileFilter(),
                FileFilterUtils.suffixFileFilter(".txt"));
        IOFileFilter filter = FileFilterUtils.or(directories, files);
        // 使用过滤器
//        FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter);
        //不使用过滤器
        FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir));
        observer.addListener(new Wechat_new());
        //创建文件变化监听器
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
        // 开始监控
        monitor.start();
    }

    public static void kaishi(String rootDir) throws Exception {
        // 监控目录
        // 轮询间隔 5 秒
        long interval = TimeUnit.SECONDS.toMillis(1);
        // 创建过滤器
        IOFileFilter directories = FileFilterUtils.and(
                FileFilterUtils.directoryFileFilter(),
                HiddenFileFilter.VISIBLE);
        IOFileFilter files = FileFilterUtils.and(
                FileFilterUtils.fileFileFilter(),
                FileFilterUtils.suffixFileFilter(".txt"));
        IOFileFilter filter = FileFilterUtils.or(directories, files);
        // 使用过滤器
//        FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter);
        //不使用过滤器
        FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir));
        observer.addListener(new Wechat_new());
        //创建文件变化监听器
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
        // 开始监控
        monitor.start();
    }

    public void getTimeByCalendar() {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR); //获取年份
        int month = cal.get(Calendar.MONTH) + 1; //获取月份
        int day = cal.get(Calendar.DATE); //获取日
        int hour = cal.get(Calendar.HOUR); //小时
        int minute = cal.get(Calendar.MINUTE); //分
        int second = cal.get(Calendar.SECOND); //秒
        int WeekOfYear = cal.get(Calendar.DAY_OF_WEEK)-1; //一周的第几天
        System.out.println(year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分" + second + "秒       星期" + WeekOfYear);
    }
}
